Wireless communication systems are widely deployed to provide various types of communications such as voice and data. One such system is wide band code division multiple access (WCDMA), which has been adopted in various competing wireless communication standards, e.g. third generation partnership project 3GPP, 3GPP project 2 (3GPP2) and long term evolution 3GPP (LTE 3GPP).
To overcome data corruption that can occur during Radio Frequency transmission, the different wireless communication standards typically include some form of channel coding, where one common channel coding technique is turbo coding.
Turbo coding involves the use of a turbo encoder for encoding a code segment (i.e. a data packet) and a turbo decoder for the decoding of the encoded code segment. A turbo encoder typically includes a pair of convolutional encoders, one of which receives information bits (i.e. systematic bits) while the other convolutional encoder receives interleaved information bits. The information bits are shuffled (interleaved) in accordance with a specified interleaving scheme. The pair of convolutional encoders output two sequences of parity bits that are frequency modulated and transmitted to a receiver. One sequence of parity bits is interleaved and the other is not interleaved. The systematic bits are also frequency modulated and transmitted to the receiver at a receiving side in the communication system.
The receiver has a turbo decoder that receives so-called channel data. Channel data includes the two sequences of parity bits, the systematic bits and channel induced errors. The turbo decoder processes channel data and interleaved channel data in order to reconstruct the data packets that were provided to the turbo encoder. Briefly, turbo decoding includes calculating branch metrics (gammas), path metrics—including forward state metrics (alphas) and backward state metrics (betas), and extrinsic information in a recursive manner.
Channel data can be processed in blocks (or sub portions of such blocks that are also referred to as windows). Odd sized blocks (including tail bits) are defined in various standards such as 3GPP, LTE 3GPP and CDMA2K.
Channel data can be represented by a trellis. The trellis includes multiple states that are arranged in so-called time instances. A time instance includes states that are associated with the same point in time. Different states of the same time instance are associated with different possible values of a channel data bit (or bits) that was received at a certain point in time. The trellis shows possible transitions between states over time. The encoding process selects between possible transitions from states of one time instance to another. The selected transitions are used to reconstruct the transmitted channel data. Each state is characterized by a branch metric and transitions to the state (and from the state) are characterized by path metrics. A path metric represents a transition probability from one state of the trellis to another state of the trellis. A backward state metric represents a transition probability from a state to an older state (a state that belongs to an older time instance). A forward state metric indicates a transition probability from a state to a newer state.
Multiple transition probabilities can enter a state and multiple transition probabilities can leaves the state. In a radix-2 trellis two transition probabilities enter a state and two transition probabilities leave a state. In a radix-4 trellis four transition probabilities enter a state and four transition probabilities leave a state. Thus, in a radix-2 trellis two state metrics (forward and backward) enter a state and two state metrics (forward and backward) exit the state.
Calculations of Radix-4 trellis inherently handle two trellis calculation steps of reaix-2 trellis per cycle. Accordingly—calculations of radix-4 trellis are twice as fast as calculations of radix-2 trellis. On the other hand radix-4 calculations require an even sized block. If an odd-sized block is to be processed by radix-4 calculations then it is padded by adding a padding time instance at the end of the block.